package tree.structure.rbtree;

/**
 * @author: 26233
 * @create: 2022-07-26 16:29:33
 * @Description
 *
 * 红黑树
 * 1. 基本性质
 *      a. 节点非黑即白
 *      b. 根节点为黑
 *      c. 叶子节点为虚拟节点，且为null,并且为黑节点
 *         // 易破坏的性质
 *      d. 红节点的孩子为黑
 *      e. 根节点到叶子节点的黑节点个数(黑高度) 相同
 *
 * 2. 红黑树的由来
 *      a. avl树在插入/删除元素后会频繁的进行旋转操作，导致在插入，删除频繁的情况下影响性能
 *      b. 红黑树不是绝对的avl树，红黑树的左右子树h差控制在 >= 1/2,可以减少调整操作
 *      c. 红黑树的调整分为变色和类似avl树的旋转，一般情况分为
 *          i. 只变色
 *          ii. 旋转并变色
 *
 *      d. 新插入的节点为红节点
 **/

public class RBNode {
    private RBNode left;
    private RBNode right;
    private RBNode parent;
    private boolean red;
    private int v;

    public RBNode(int v) {
        this.v = v;
        this.red = true;
    }

    public RBNode getLeft() {
        return left;
    }

    public RBNode getRight() {
        return right;
    }

    public RBNode getParent() {
        return parent;
    }

    public boolean isRed() {
        return red;
    }

    public void setRed(boolean red) {
        this.red = red;
    }

    public void setLeft(RBNode left) {
        this.left = left;
    }

    public void setRight(RBNode right) {
        this.right = right;
    }

    public void setParent(RBNode parent) {
        this.parent = parent;
    }

    public int getV() {
        return v;
    }
}
